if (socket->m_WorkDone.find(s_PortalArray[socketIndex]) == socket->m_WorkDone.end()) // Prevent reflection
{
VIS_SYNC_PORTAL tmppacket;
if (Create_SYNC_PORTAL_OUTPACKET(&tmppacket, socketIndex, globalIndex, socket->m_ClientId))
{
if (outpacket.addSubpacket(&tmppacket))
{
socketIndex++;
}
else
{
done = true;
}
}
else
{
done = true; // hit an error (probably portal has stat_done not set)
}
}
else
{
IfDebug(Developer(DEVELOPER_LEVEL_MEGASPAM, "Not sending SYNC_PORTAL packet of portal %d to client %d, client sent it to us!\n", s_PortalArray[socketIndex], socket->m_ClientId));
socketIndex++;
}
}
socket->m_WorkDoneLock.LeaveMutex();
if (socketIndex < globalIndex)
{
outpacket.setMoreToSync(1);
}
else
{
outpacket.setMoreToSync(0);
}
int workindex = 0;
socket->m_WorkQueueLock.EnterMutex();
while (socket->m_WorkQueue.size() < WORK_QUEUE_SIZE)
{
long work = GetNextPortalIndex();
socket->m_WorkQueue.push_back(work);
outpacket.setWork(work, workindex);
workindex++;
IfDebug(Developer(DEVELOPER_LEVEL_SPAM, "[#%d] Adding work %d to SYNC_PORTAL_CLUSTER\n", socket->m_ClientId, work));
}
socket->m_WorkQueueLock.LeaveMutex();
// Remaining index[] should still be set to -1 from the constructor
IfDebug(Developer(DEVELOPER_LEVEL_FLUFF,
"[#%d] Sending SYNC_PORTAL_CLUSTER with %d subpackets, %d work jobs, more_to_sync(%d)\n",
socket->m_ClientId, socketIndex - socket->m_SyncIndex, workindex, outpacket.getMoreToSync())); // TODO print all work sent
socket->SendPacket(&outpacket);
socket->m_SyncIndex = socketIndex;
}
else // Just more work
{
outpacket.setMoreToSync(0);
int workindex = 0;
socket->m_WorkQueueLock.EnterMutex();
while (socket->m_WorkQueue.size() < WORK_QUEUE_SIZE)
{
long work = GetNextPortalIndex();
socket->m_WorkQueue.push_back(work);
outpacket.setWork(work, workindex);
workindex++;
IfDebug(Developer(DEVELOPER_LEVEL_SPAM, "[#%d] Adding work %d to SYNC_PORTAL_CLUSTER\n", socket->m_ClientId, work));
}
socket->m_WorkQueueLock.LeaveMutex();
// Remaining index[] should still be set to -1 from the constructor
IfDebug(Developer(DEVELOPER_LEVEL_SPAM, "[#%d] Sending SYNC_PORTAL_CLUSTER with %d work jobs\n", socket->m_ClientId,